lexer grammar AnalexCLexer;

options {
  language = Java;
}

@header {
    package practica6;
}


@members {
     private ArrayList<RecognitionException> errors = new ArrayList<RecognitionException>();
     public ArrayList<RecognitionException> getErrors() {
        return errors;
     }
     @Override
     public void reportError (RecognitionException e) {
        String msg = getErrorMessage(e, getTokenNames());
        System.err.println(msg);
        errors.add(e);
     }
}

BLANCO: (' '|'\t'|'\r\n') {skip();};
fragment DIGITO: '0'..'9';
fragment LETRA: ('a'..'z')|('A'..'Z')|'_';
WHILE: 'while';
IF: 'if';
MAIN: 'main';
VOID: 'void';
INT: 'int';
BREAK: 'break';
PRINTF: 'printf';
CHAR: 'char';
FLOAT: 'float';
FOR: 'for';
NUMERO: (DIGITO)+('.'(DIGITO)+)?;
IDENT: LETRA(LETRA|DIGITO)* CORCHETES?;
OPERADOR: ('+'|'/'|'*');
COMPARADOR: ('<'|'>'|'<='|'>='|'==');
INTERROGANTE: '?';
CAMBIO_SIGNO: '-';
IGUAL: '=';
PARENTESIS_A: '(';
PARENTESIS_C: ')';
DOS_PUNTOS: ':';
PUNTO_COMA: ';';
COMA: ',';
LLAVE_A: '{';
INCREMENTO: '++';
DECREMENTO: '--';
LLAVE_C: '}';
COMILLA: '\'';
COMILLAS: '"';
CORCHETE_A: '[';
CORCHETE_C: ']';
NOT: '!';
AND: '&&';
OR: '||';
CORCHETES: CORCHETE_A NUMERO? CORCHETE_C;
CADENA: COMILLAS (options {greedy=false;}:.)* COMILLAS;